//存在一个按升序排列的链表，给你这个链表的头节点 head ，请你删除所有重复的元素，使每个元素 只出现一次 。 
//
// 返回同样按升序排列的结果链表。 
//
// 
//
// 示例 1： 
//
// 
//输入：head = [1,1,2]
//输出：[1,2]
// 
//
// 示例 2： 
//
// 
//输入：head = [1,1,2,3,3]
//输出：[1,2,3]
// 
//
// 
//
// 提示： 
//
// 
// 链表中节点数目在范围 [0, 300] 内 
// -100 <= Node.val <= 100 
// 题目数据保证链表已经按升序排列 
// 
// Related Topics 链表 
// 👍 627 👎 0

/**
 * @author DaHuangXiao
 */
package leetcode.editor.cn;

public class RemoveDuplicatesFromSortedList {
    public static void main(String[] args) {
        Solution solution = new RemoveDuplicatesFromSortedList().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     * int val;
     * ListNode next;
     * ListNode() {}
     * ListNode(int val) { this.val = val; }
     * ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        //        public ListNode deleteDuplicates1(ListNode head) {
//            ListNode hair = new ListNode(-1);
//            // tail有效链表尾部
//            ListNode tail = hair;
//
//            while (head!=null) {
//                // 已经到头，或者head下一个不重复时，可以更新tail
//                if (head.next==null || head.next.val!=head.val){
//                    tail.next = head;
//                    tail = tail.next;
//                    head = head.next;
//                }else {
//                    // 如果head与下一个重复，则跳过重复值
//                    while (head.next != null && head.next.val == head.val) {
//                        head = head.next;
//                    }
//                }
//            }
//            // 尾部置空
//            tail.next = null;
//            return hair.next;
//        }
        public ListNode deleteDuplicates(ListNode head) {
            ListNode hair = new ListNode(-1000);
            hair.next = head;
            ListNode cur = head;
            ListNode pre = hair;
            while(cur!=null){
                while (cur!=null && cur.val==pre.val){
                    pre.next = cur.next;
                    cur = cur.next;
                }
                if (cur!=null){
                    pre = cur;
                    cur = cur.next;
                }
            }
            return hair.next;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}